package com.hmkj.core.model.quote;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.xiaoleilu.hutool.util.StrUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * K线数据封装
 *
 * @author Vector
 * @create 2017-11-13 17:08
 */
@Data
public class KlineData {
    /**
     * 合约代码
     */
    @JsonIgnore
    @ApiModelProperty(value = "合约代码")
    private String cc;
    /**
     * 市场类别
     */
    @JsonIgnore
    @ApiModelProperty(value = "市场类别")
    private String fet;
    /**
     * 产品代码
     */
    @JsonIgnore
    @ApiModelProperty(value = "产品代码")
    private String ct;
    /**
     * 开盘价
     */
    @ApiModelProperty(value = "开盘价")
    private String op;
    /**
     * 收盘价
     */
    @ApiModelProperty(value = "收盘价")
    private String cp;
    /**
     * 最高价
     */
    @ApiModelProperty(value = "最高价")
    private String hp;
    /**
     * 最低价
     */
    @ApiModelProperty(value = "最低价")
    private String lp;

    /**
     * 成交数量
     */
    @ApiModelProperty(value = "成交数量")
    private String ba;
    /**
     * 成交金额
     */
    @ApiModelProperty(value = "成交金额")
    private String bb;
    /**
     * 日期
     */
    @ApiModelProperty(value = "日期")
    private String d;

    /**
     * 分时时间
     */
    @ApiModelProperty(value = "分时时间")
    private String mt;

    /**
     * 时间戳
     */
    @ApiModelProperty(value = "时间戳")
    private long dt;

    public long getDt() {
        String dtStr;
        if (StrUtil.isNotBlank(d) && StrUtil.isNotBlank(mt)) {
            dtStr = d + mt + "00";
        } else if (StrUtil.isNotBlank(d)) {
            dtStr = d + "000000";
        } else {
            dtStr = new SimpleDateFormat("yyyyMMdd").format(new Date()) + mt + "00";
        }
        try {
            return new SimpleDateFormat("yyyyMMddHHmmss").parse(dtStr).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0L;
    }

    /**
     * K线类型 M1:1分钟K线 M3:3分钟K线 M5:5分钟K线 M15:15分钟K线 M30:30分钟K线 M60:60分钟K线 D1:日K
     **/
    public enum TYPE {

        M1("M1", "1"),
        M3("M3", "3"),
        M5("M5", "5"),
        M15("M15", "15"),
        M30("M30", "30"),
        M60("M60", "60"),
        D1("D1", "D1");

        public final String code;
        public final String value;
        private static Map<String, String> map = new HashMap<String, String>();

        TYPE(String value, String code) {
            this.code = code;
            this.value = value;
        }

        public static String getValue(String code) {
            if (null == code) {
                return null;
            }
            for (TYPE type : TYPE.values()) {
                if (type.code == code) {
                    return type.value;
                }
            }
            return null;
        }

        public static String getCode(String value) {
            if (null == value || "".equals(value)) {
                return null;
            }
            for (TYPE type : TYPE.values()) {
                if (type.value.equals(value)) {
                    return type.code;
                }
            }
            return null;
        }

        public static Map<String, String> getEnumMap() {
            if (map.size() == 0) {
                for (TYPE type : TYPE.values()) {
                    map.put(type.code, type.value);
                }
            }
            return map;
        }
    }

}
